// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// std中存在的内容，但由于go/build deps_test策略的原因，我们无法使用，因为它依赖于net。

package netip

func stringsLastIndexByte(s string, b byte) int {
	for i := len(s) - 1; i >= 0; i-- {
		if s[i] == b {
			return i
		}
	}
	return -1
}

func beUint64(b []byte) uint64 {
	_ = b[7] // 编译器的边界检查提示；见戈朗。org/issue/14808 
	return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
		uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
}

func bePutUint64(b []byte, v uint64) {
	_ = b[7] // 早期边界检查以保证低于
	b[0] = byte(v >> 56)
	b[1] = byte(v >> 48)
	b[2] = byte(v >> 40)
	b[3] = byte(v >> 32)
	b[4] = byte(v >> 24)
	b[5] = byte(v >> 16)
	b[6] = byte(v >> 8)
	b[7] = byte(v)
}

func bePutUint32(b []byte, v uint32) {
	_ = b[3] // 早期边界检查以保证低于
	b[0] = byte(v >> 24)
	b[1] = byte(v >> 16)
	b[2] = byte(v >> 8)
	b[3] = byte(v)
}

func leUint16(b []byte) uint16 {
	_ = b[1] // 编译器的边界检查提示；见戈朗。org/issue/14808 
	return uint16(b[0]) | uint16(b[1])<<8
}

func lePutUint16(b []byte, v uint16) {
	_ = b[1] // 早期边界检查以确保写在
	b[0] = byte(v)
	b[1] = byte(v >> 8)
}
